package com.joe.demo.nio.buffer;

import lombok.extern.slf4j.Slf4j;

import java.io.FileInputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;

/**
 * @author windows
 */
@Slf4j
public class TestByteBuffer {

    public static void main(String[] args) {
        // FileChannel
        // 1. 输入输出流 2. RandomAccessFile
        try (FileChannel channel = new FileInputStream("test.txt").getChannel()) {
            // 准备缓存区 初始是写入模式
            ByteBuffer buffer = ByteBuffer.allocate(10);
            // 从 channel 中读取数据，向 buffer 写入
            while (true){
                int len = channel.read(buffer);
                log.info("读取到的字节数：{}", len);
                // 没有内容就退出
                if (len == -1){
                    break;
                }
                // 切换至 读模式
                buffer.flip();
                while (buffer.hasRemaining()){
                    byte b = buffer.get();
                    log.info("读取到的字节: {}", (char) b);
                }
                // 切换为 写模式
                buffer.clear();
            }
        } catch (IOException e) {
            e.printStackTrace();
            log.error("读取失败, {}", e.getLocalizedMessage());
        }
    }
}
